home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230S / WPFIX.C < prev    next >
C/C++ Source or Header  |  1997-07-30  |  3KB  |  126 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. long inputlines = 0, outputlines = 0;
  6. long totallines = 0;
  7. char buffer[256];
  8. FILE *fp;
  9.  
  10. #if !defined(_lint)
  11. static char rcsid[] OPTIONAL = "$Id: wpfix.c,v 1.7 1997/07/31 00:44:20 root Exp root $";
  12. #endif
  13.  
  14. struct entry    {
  15.     char  *call;
  16. };
  17. struct entry *e;
  18.  
  19.  
  20. int
  21. finddup (filenm, index)
  22. char *filenm;
  23. int index;
  24. {
  25. int retval = 0;
  26. long k;
  27. char *cp;
  28.  
  29.     if (buffer[0] < 'A')
  30.         return 1;
  31.     putchar ('\r');
  32.     clreol();
  33.     printf ("%s processing #%05ld/%05ld: '%s'....", filenm, inputlines, outputlines, buffer);
  34.     for (k = index + 1; k < totallines; k++)    {
  35.         if (!strncmp (buffer, e[k].call, 6))    {
  36.             retval = 1;
  37.             break;
  38.         }
  39.     }
  40.     return (retval);
  41. }
  42.  
  43.  
  44. void
  45. process (filenm, maxlen)
  46. char *filenm;
  47. int maxlen;
  48. {
  49. register FILE *out, *fpin;
  50. register char *sptr = buffer;
  51. register char *cp, *cp2;
  52. int llen;
  53. long k;
  54.  
  55.     inputlines = outputlines = 0;
  56.     if ((fpin = fp = fopen (filenm, "r")) == NULL)
  57.         return;
  58.     if ((out = fopen ("spool/temp", "w")) == NULL)    {
  59.         fclose (fp);
  60.         return;
  61.     }
  62.     while (!feof(fpin))    {
  63.         fgets (sptr, 256, fpin);
  64.         if (feof(fpin))
  65.             break;
  66.         totallines++;
  67.     }
  68.     rewind(fpin);
  69.     printf ("File '%s' originally contains %ld entries\n", filenm, totallines);
  70.     e = malloc (totallines * sizeof (char *));
  71.     if (e == 0)    {
  72.         printf ("Error allocating memory\n");
  73.         exit (0);
  74.     }
  75.     for (k = 0; k < totallines; k++)    {
  76.         fgets (sptr, 256, fpin);
  77.         e[k].call = malloc(6);
  78.         strncpy (e[k].call, sptr, 6);
  79.     }
  80.     rewind(fpin);
  81.         
  82.     cp2 = strrchr (filenm, '/');
  83.     cp2++;
  84.     k = 0;
  85.     while (!feof(fpin))    {
  86.         fgets (sptr, 256, fpin);
  87.         if (feof(fpin))
  88.             break;
  89.         inputlines++;
  90.         llen = strlen(sptr);
  91.         if ((llen > maxlen+2) || (llen < maxlen))    {
  92.             k++;
  93.             continue;
  94.         }
  95.         cp = strchr (sptr, ' ');
  96.         *cp++ = 0;
  97.         if (!finddup (cp2, k))    {
  98.             while (*cp == ' ')
  99.                 cp++;
  100.             cp[strlen(cp) - 1] = 0;
  101.             fprintf(out,"%-*s %-14s\n", maxlen - 15, sptr, cp);
  102.             outputlines++;
  103.         }
  104.         k++;
  105.     }
  106.     fclose (fp);
  107.     fclose (out);
  108.     for (k = 0; k < totallines; k++)
  109.         free (e[k].call);
  110.     free (e);
  111.     unlink (filenm);
  112.     rename ("spool/temp", filenm);
  113.     printf ("\n\nFile '%s' complete!\nOriginal number of lines: %ld\nNew number of lines: %ld\nNumber of duplicate lines: %ld\n\n", filenm, inputlines, outputlines, inputlines - outputlines);
  114. }
  115.  
  116.  
  117. void
  118. main ()
  119. {
  120.     printf ("Quick hack to fix white pages duplicates\nStand by, this will take a while...\n\n");
  121. /*    process ("spool/wpages", 28); */
  122.     process ("spool/wpagebbs", 47);
  123. }
  124.  
  125.  
  126.